package ar.frba.utn.disenio.aterrizar.com.parte1;

public class Calendario {

	private int[] meses = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	
	public void setMeses(int [] meses) {
		this.meses = meses;
	}

	public int [] getMeses() {
		return meses;
	}

	public boolean sonIguales(Fecha fecha1, Fecha fecha2) {
		Boolean coincidenDias = (fecha1.getDia() == fecha2.getDia());
		Boolean coincidenMeses = (fecha1.getMes() == fecha2.getMes());
		Boolean coincidenAnios = (fecha1.getAnio() == fecha2.getAnio());
		Boolean resultado = coincidenDias && coincidenMeses && coincidenAnios;
		return resultado;
	}

	public int calcularDiferenciaEnDiasEntre(Fecha fecha1, Fecha otraFecha) {
		int diferenciaEnDias;

		if (this.sonIguales(fecha1, otraFecha))
			diferenciaEnDias = 0;

		else {
			if (this.laPrimeraEsAnteriorALaSegunda(fecha1, otraFecha))
				diferenciaEnDias = this.diasDesdeHasta(fecha1, otraFecha);
			else
				diferenciaEnDias = this.diasDesdeHasta(otraFecha, fecha1);
		}

		return diferenciaEnDias;
	}

	private int diasDesdeHasta(Fecha fechaAnterior, Fecha fechaPosterior) {
		int diasPasados = 0;
		int i;
		diasPasados = (fechaPosterior.getAnio() - fechaAnterior.getAnio()) * 365;

		if (fechaAnterior.getMes() < fechaPosterior.getMes())
			for (i = fechaAnterior.getMes(); i < fechaPosterior.getMes(); i++)
				diasPasados += this.meses[i];
		if (fechaAnterior.getMes() > fechaPosterior.getMes())
			for (i = fechaPosterior.getMes(); i < fechaAnterior.getMes(); i++)
				diasPasados -= this.meses[i];

		if (fechaAnterior.getDia() < fechaPosterior.getDia())
			for (i = fechaAnterior.getDia(); i < fechaPosterior.getDia(); i++)
				diasPasados++;
		if (fechaAnterior.getMes() > fechaPosterior.getMes())
			for (i = fechaPosterior.getDia(); i < fechaAnterior.getDia(); i++)
				diasPasados--;

		return diasPasados;
	}

	private boolean laPrimeraEsAnteriorALaSegunda(Fecha fecha1, Fecha fecha2) {
		boolean bool = false;
		if (fecha1.getAnio() < fecha2.getAnio())
			bool = true;
		else if (fecha1.getAnio() > fecha2.getAnio())
			bool = false;

		else if (fecha1.getAnio() == fecha2.getAnio()) {
			if (fecha1.getMes() < fecha2.getMes())
				bool = true;
			else if (fecha1.getMes() > fecha2.getMes())
				bool = false;

			else if (fecha1.getMes() == fecha2.getMes())
				if (fecha1.getDia() < fecha2.getMes())
					bool = true;
				else
					bool = false;
		}
		return bool;
	}
}
